From: Ray Strode Date: Thu, 18 Jul 2019 14:06:38 +0000 (-0400) Subject: appDisplay: Clear AllView reference to current popup when destroyed X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~839^2^2~144 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=164f3fa3fd4fc37be043c7aa659cbe1f0cc94ab1;p=gnome-shell.git appDisplay: Clear AllView reference to current popup when destroyed AllView contains a reference to the current popup that lingers after the popup is destroyed. This commit fixes that, by explicitly nullifying when appropriate. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 7c2eaf027..8d63a4eec 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -285,6 +285,7 @@ var AllView = class AllView extends BaseAppView { this._eventBlocker.add_action(this._clickAction); this._displayingPopup = false; + this._currentPopupDestroyId = 0; this._availWidth = 0; this._availHeight = 0; @@ -574,7 +575,22 @@ var AllView = class AllView extends BaseAppView { this._stack.add_actor(popup.actor); popup.connect('open-state-changed', (popup, isOpen) => { this._eventBlocker.reactive = isOpen; - this._currentPopup = isOpen ? popup : null; + + if (this._currentPopup) { + this._currentPopup.actor.disconnect(this._currentPopupDestroyId); + this._currentPopupDestroyId = 0; + } + + this._currentPopup = null; + + if (isOpen) { + this._currentPopup = popup; + this._currentPopupDestroyId = popup.actor.connect('destroy', () => { + this._currentPopup = null; + this._currentPopupDestroyId = 0; + this._eventBlocker.reactive = false; + }); + } this._updateIconOpacities(isOpen); if (!isOpen) this._closeSpaceForPopup();